// flat() 方法创建一个新的数组，并根据指定深度递归地将所有子数组元素拼接到新的数组中。

// -------------------- 展平嵌套数组 --------------------
const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  Infinity深度参数


//有问题！
/**
 * 手写flat 不支持Infinity参数
 * @param {Array} arr
 * @param {number} depth
 * @return {Array}
 */
var flat = function (arr, n) {
    if (n === 0) return arr
    const res = flat(arr, n - 1)
    return [].concat(...res)
  };
  
  console.log(flat([1, [2, [3, [4, [5]]]]], 2))